package demo1;

public class dynamicPlanningPractise {
    /**
     * 不同路径Ⅱ
     * 时间复杂度O（M**N）
     * 空间复杂度O（M*N）*/
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        //1 创建dp表
        int[][] dp = new int[m+1][n+1];
        //2 初始化
        dp[0][1] = 1;
        //3 填表
        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= n; j++)
                if(obstacleGrid[i-1][j-1]!=1)
                    //4 状态转移方程
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
        //5 返回值
        return dp[m][n];
    }

    /**
     * 礼物的最高价值
     * 时间复杂度O（m*n）
     * 空间复杂度O(m*n)*/
    public int jewelleryValue(int[][] frame) {
        int m = frame.length;
        int n = frame[0].length;
        //1创建dp表
        int[][] dp = new int[m+1][n+1];
        //2 初始化 -》将所有虚拟位置初始化为0，即是不做操作
        //3 填表
        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= n; j++)
                //4 状态转移方程
                dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]) + frame[i-1][j-1];
        //5 返回值
        return dp[m][n];
    }


    public static void main(String[] args) {
        int[][] tmp = new int[10][5];
        System.out.println(tmp[1].length);
    }
}
